package s19;

import base.Bean2;
import net.sf.cglib.reflect.FastClass;
import net.sf.cglib.reflect.FastMethod;

import java.lang.reflect.InvocationTargetException;

/**
 * FastClass就是对Class对象进行特定的处理，
 * 比如通过数组保存method引用， 因此FastClass引出了一个index下标的新概念，
 * 比如 getIndex(String name, Class[] parameterTypes)就是以前的获取method的方法。
 * 通过数组存储method,constructor等class信息，从而将原先的反射调用，
 * 转化为class.index的直接调用，从而体现所谓的FastClass。
 *
 * @author wangpp
 */
public class FastClassTest {
    public static void main(String[] args) throws InvocationTargetException {
        FastClass f = FastClass.create(Bean2.class);

        FastMethod getValue = f.getMethod("getValue", new Class[0]);

        Bean2 b = new Bean2();
        b.setValue("hello bean2");

        Object result = getValue.invoke(b, new Object[0]);
        System.out.println(result);

    }
}
